package com.example.demo.service.impl;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.example.demo.mapper.StyleMapper;
import com.example.demo.pojo.entity.Style;
import com.example.demo.service.StyleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

import static com.example.demo.common.constant.RedisConstants.STYLE_KEY;
import static com.example.demo.common.constant.RedisConstants.STYLE_TTL;

@Service
public class StyleServiceImpl implements StyleService {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private StyleMapper styleMapper;
    @Override
    public List<Style> getStyle() {
        String key =STYLE_KEY;
        String shopTypeJSON = stringRedisTemplate.opsForValue().get(key);

        List<Style> typeList = null;
        // 2、判断缓存是否命中
        if (StrUtil.isNotBlank(shopTypeJSON)) {
            // 2.1 缓存命中，直接返回缓存数据
            typeList = JSONUtil.toList(shopTypeJSON, Style.class);
            return typeList;
        }
        // 2.1 缓存未命中，查询数据库
        typeList = styleMapper.style_list();

        // 3、判断数据库中是否存在该数据
        if (Objects.isNull(typeList)) {
            // 3.1 数据库中不存在该数据，返回失败信息
            return null;
        }
        // 3.2 风格数据存在，写入Redis，并返回查询的数据
        stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(typeList),
                STYLE_TTL, TimeUnit.MINUTES);
        return typeList;
    }
}
